home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / unixSyscall / mmap.c < prev    next >
C/C++ Source or Header  |  1991-08-12  |  6KB  |  273 lines

  1. /* 
  2.  * mmap.c --
  3.  *
  4.  *    Procedure to map from Unix mmap system call to Sprite.
  5.  *
  6.  * Copyright 1989 Regents of the University of California
  7.  * All rights reserved.
  8.  */
  9.  
  10. #ifndef lint
  11. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/mmap.c,v 1.4 91/08/12 17:10:47 shirriff Exp $ SPRITE (Berkeley)";
  12. #endif not lint
  13.  
  14. #include "sprite.h"
  15.  
  16. #include <sys/types.h>
  17.  
  18. #include "compatInt.h"
  19.  
  20.  
  21. /*
  22.  *----------------------------------------------------------------------
  23.  *
  24.  * mmap --
  25.  *
  26.  *    Procedure to map from Unix mmap system call to Sprite
  27.  *    Vm_Mmap.
  28.  *
  29.  * Results:
  30.  *    Returns address of the mapped segment.
  31.  *    Returns -1 if an error occurs.
  32.  *
  33.  * Side effects:
  34.  *    Creates a mapped segment.
  35.  *
  36.  *----------------------------------------------------------------------
  37.  */
  38.  
  39. Address
  40. mmap(addr, len, prot, share, fd, pos)
  41.     caddr_t    addr;    /* Starting virtual address of mapped segment. */
  42.     int        len;    /* Length of segment to map. */
  43.     int     prot;    /* Protections for segment. */
  44.     int        share;    /* Private/shared flag. */
  45.     int        fd;    /* Descriptor of open file to map. */
  46.     off_t    pos;    /* Offset into mapped file. */
  47. {
  48.     Address newAddr;        /* Address returned by Vm_Mmap. */
  49.     ReturnStatus status;    /* result returned by Vm_Mmap. */
  50.  
  51.     status = Vm_Mmap((Address)addr, len, prot, share, fd, pos, &newAddr);
  52.     if (status != SUCCESS) {
  53.     errno = Compat_MapCode(status);
  54.     return((Address) -1);
  55.     } else {
  56.     return (newAddr);
  57.     }
  58. }
  59.  
  60.  
  61. /*
  62.  *----------------------------------------------------------------------
  63.  *
  64.  * munmap --
  65.  *
  66.  *    Procedure to map from Unix munmap system call to Sprite
  67.  *    Vm_Munmap.
  68.  *
  69.  * Results:
  70.  *    Returns 0 on success.
  71.  *    Returns -1 if an error occurs.
  72.  *
  73.  * Side effects:
  74.  *    Removes the mapping of the page.
  75.  *
  76.  *----------------------------------------------------------------------
  77.  */
  78.  
  79. int
  80. munmap(addr, len)
  81.     caddr_t    addr;    /* Starting virtual address of mapped segment. */
  82.     int        len;    /* Length of segment to unmap. */
  83. {
  84.     ReturnStatus status;    /* result returned by Vm_Mmap. */
  85.  
  86.     status = Vm_Munmap((Address)addr, len, 0);
  87.     if (status != SUCCESS) {
  88.     errno = Compat_MapCode(status);
  89.     return(-1);
  90.     } else {
  91.     return (0);
  92.     }
  93. }
  94.  
  95. /*
  96.  *----------------------------------------------------------------------
  97.  *
  98.  * msync --
  99.  *
  100.  *    Procedure to map from Unix msync system call to Sprite
  101.  *    Vm_Msync.
  102.  *
  103.  * Results:
  104.  *    Returns 0 if success.
  105.  *    Returns -1 if an error occurs.
  106.  *
  107.  * Side effects:
  108.  *    Syncs pages to disk.
  109.  *
  110.  *----------------------------------------------------------------------
  111.  */
  112.  
  113. int
  114. msync(addr, len)
  115.     caddr_t    addr;    /* Starting virtual address of region. */
  116.     int        len;    /* Length of segment to sync. */
  117. {
  118.     ReturnStatus status;    /* result returned by Vm_Msync. */
  119.  
  120.     status = Vm_Msync((Address)addr, len);
  121.     if (status != SUCCESS) {
  122.     errno = Compat_MapCode(status);
  123.     return(-1);
  124.     } else {
  125.     return (0);
  126.     }
  127. }
  128.  
  129.  
  130. /*
  131.  *----------------------------------------------------------------------
  132.  *
  133.  * mlock --
  134.  *
  135.  *    Procedure to map from Unix mmap system call to Sprite
  136.  *    Vm_Mlock.
  137.  *
  138.  * Results:
  139.  *    Returns 0 if success.
  140.  *    Returns -1 if an error occurs.
  141.  *
  142.  * Side effects:
  143.  *    locks pages.
  144.  *
  145.  *----------------------------------------------------------------------
  146.  */
  147.  
  148. int
  149. mlock(addr, len)
  150.     caddr_t    addr;    /* Starting virtual address of region. */
  151.     int        len;    /* Length of region to lock. */
  152. {
  153.     ReturnStatus status;    /* result returned by Vm_Mlock. */
  154.  
  155.     status = Vm_Mlock((Address)addr, len);
  156.     if (status != SUCCESS) {
  157.     errno = Compat_MapCode(status);
  158.     return(-1);
  159.     } else {
  160.     return (0);
  161.     }
  162. }
  163.  
  164.  
  165. /*
  166.  *----------------------------------------------------------------------
  167.  *
  168.  * munlock --
  169.  *
  170.  *    Procedure to map from Unix mmap system call to Sprite
  171.  *    Vm_Munlock.
  172.  *
  173.  * Results:
  174.  *    Returns 0 if success.
  175.  *    Returns -1 if an error occurs.
  176.  *
  177.  * Side effects:
  178.  *    Unlocks pages.
  179.  *
  180.  *----------------------------------------------------------------------
  181.  */
  182.  
  183. int
  184. munlock(addr, len)
  185.     caddr_t    addr;    /* Starting virtual address of region. */
  186.     int        len;    /* Length of region to unlock. */
  187. {
  188.     ReturnStatus status;    /* result returned by Vm_Munlock. */
  189.  
  190.     status = Vm_Munlock((Address)addr, len);
  191.     if (status != SUCCESS) {
  192.     errno = Compat_MapCode(status);
  193.     return(-1);
  194.     } else {
  195.     return (0);
  196.     }
  197. }
  198.  
  199.  
  200. /*
  201.  *----------------------------------------------------------------------
  202.  *
  203.  * mincore --
  204.  *
  205.  *    Procedure to map from Unix mincore system call to Sprite
  206.  *    Vm_Mincore.
  207.  *
  208.  * Results:
  209.  *    Returns vector of values; one for each page.
  210.  *        0 if page not virtually present.
  211.  *        1 if page paged out.
  212.  *        2 if page clean, unreferenced.
  213.  *        3 if page clean, referenced.
  214.  *        4 if page dirty.
  215.  *
  216.  * Side effects:
  217.  *    None.
  218.  *
  219.  *----------------------------------------------------------------------
  220.  */
  221.  
  222. int
  223. mincore(addr, len, vec)
  224.     caddr_t    addr;    /* Starting virtual address. */
  225.     int        len;    /* Length of segment to map. */
  226.     char     *vec;    /* Return value vector. */
  227. {
  228.     ReturnStatus status;    /* result returned by Vm_Mincore. */
  229.  
  230.     status = Vm_Mincore((Address)addr, len, vec);
  231.     if (status != SUCCESS) {
  232.     errno = Compat_MapCode(status);
  233.     return(-1);
  234.     } else {
  235.     return (0);
  236.     }
  237. }
  238.  
  239. /*
  240.  *----------------------------------------------------------------------
  241.  *
  242.  * mprotect --
  243.  *
  244.  *    Procedure to map from Unix mprotect system call to Sprite
  245.  *    Vm_Mprotect.
  246.  *
  247.  * Results:
  248.  *    Returns 0 if success.
  249.  *    Returns -1 if an error occurs.
  250.  *
  251.  * Side effects:
  252.  *    Changes protection.
  253.  *
  254.  *----------------------------------------------------------------------
  255.  */
  256.  
  257. Address
  258. mprotect(addr, len, prot)
  259.     caddr_t    addr;    /* Starting virtual address. */
  260.     int        len;    /* Length of region. */
  261.     int     prot;    /* Protections for segment. */
  262. {
  263.     ReturnStatus status;    /* result returned by Vm_Mprotect. */
  264.  
  265.     status = Vm_Mprotect((Address)addr, len, prot);
  266.     if (status != SUCCESS) {
  267.     errno = Compat_MapCode(status);
  268.     return(-1);
  269.     } else {
  270.     return (0);
  271.     }
  272. }
  273.